{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os\n",
    "\n",
    "import preprocessing as pp\n",
    "import model_gen as vae\n",
    "\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import layers\n",
    "\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "time_step = 288\n",
    "\n",
    "thresh_dir = 'deploy/'\n",
    "model_dir = 'deploy/models_' + str(time_step) + '/'\n",
    "data_path = '/Users/baconbaker/Documents/Studium/ANM/anm-project/data/test_data/host/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "def find_anom(host, dfs):\n",
    "    dfs['db_oracle_11g'] = dfs.pop('db')\n",
    "    dfs['dcos_container'] = dfs.pop('container')\n",
    "    dfs['mw_redis'] = dfs.pop('redis')\n",
    "    dfs['os_linux'] = dfs.pop('os')\n",
    "    dfs['dcos_docker'] = dfs.pop('docker')\n",
    "    \n",
    "    problems = []\n",
    "    key = ''\n",
    "    for k in dfs:\n",
    "        if host in dfs[k].cmdb_id.unique():\n",
    "            key = k\n",
    "    if key == '':\n",
    "        print('Host not found!')\n",
    "        return\n",
    "    df = dfs[key]\n",
    "\n",
    "    thresh = pd.read_csv(thresh_dir+'thresh_'+str(time_step)+'.csv')\n",
    "\n",
    "    df_h = df[df.cmdb_id==host]\n",
    "    for name in df_h['name'].unique():\n",
    "        df_nh = df_h[df_h.name == name]\n",
    "\n",
    "        #Pre-process data  \n",
    "        print('-'*40)\n",
    "        x_test = pp.get_host_kpi_data(df_nh, time_step)\n",
    "        if key+'_'+name in os.listdir(model_dir):\n",
    "            print(\"Running detection for \", host, name)\n",
    "            if np.array(x_test).size == 0:\n",
    "                print(name, host, 'not enough data')\n",
    "                continue\n",
    "\n",
    "            model = keras.models.load_model(model_dir+key+'_'+name)\n",
    "            x_test_pred = model.predict(x_test)\n",
    "            test_mae_loss = np.mean(np.abs(x_test_pred - x_test), axis=1)\n",
    "            test_mae_loss = test_mae_loss.reshape((-1))\n",
    "            \n",
    "            print(\"Checking for anomalies\")\n",
    "            anomalies = np.greater(test_mae_loss, thresh[thresh.KPI==key+'_'+name]['thresh'].values[0])\n",
    "            \n",
    "            if True in anomalies:\n",
    "                print('*'*40)\n",
    "                print(\"Anomaly in \", host, name)\n",
    "                plt.plot(x_test[0])\n",
    "                plt.plot(model.predict(x_test)[0])\n",
    "                plt.show()\n",
    "                problems.append((host, name))\n",
    "        else:\n",
    "            print(name, host, ' model does not exist')\n",
    "    if problems == []:\n",
    "        print(\"No anomalies found in \", host)\n",
    "    return problems"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving os into dfs\n",
      "Saving db into dfs\n",
      "Saving redis into dfs\n",
      "Saving container into dfs\n",
      "Saving docker into dfs\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_rd_ios\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 CPU_idle_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_await\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_avgqu_sz\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Processor_load_5_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Processor_load_1_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Outgoing_network_traffic\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_io_util\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Processor_load_15_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Incoming_network_traffic\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Agent_ping\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 ss_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Send_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Recv_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 CPU_util_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Page_po\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Page_pi\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Memory_available_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Memory_used_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Memory_available\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Memory_used\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 CPU_user_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 ICMP_ping\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_wr_kbs\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 CPU_system_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_wr_ios\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_svctm\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 CPU_iowait_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_021 Disk_rd_kbs\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Memory_free os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Cache_used os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Buffers_used os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Swap_used_pct os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Num_of_processes os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Zombie_Process os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Num_of_running_processes os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "System_wait_queue_length os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "System_block_queue_length os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Sent_queue os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Received_queue os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Shared_memory os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_used_space os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_used_pct os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_total_space os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_max_util os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_max_avail os_021  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_021 Sent_packets\n",
      "Sent_packets os_021 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_021 Sent_errors_packets\n",
      "Sent_errors_packets os_021 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_021 Received_packets\n",
      "Received_packets os_021 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_021 Received_errors_packets\n",
      "Received_errors_packets os_021 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Memory_total os_021  model does not exist\n",
      "No anomalies found in  os_021\n",
      "Saving os into dfs\n",
      "Saving db into dfs\n",
      "Saving redis into dfs\n",
      "Saving container into dfs\n",
      "Saving docker into dfs\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Agent_ping\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 ss_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Send_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Recv_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Page_po\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Page_pi\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Outgoing_network_traffic\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Memory_used_pct\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Incoming_network_traffic\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Memory_used\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Memory_available\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 ICMP_ping\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 CPU_user_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_wr_kbs\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 CPU_system_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_wr_ios\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_svctm\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_rd_kbs\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 CPU_iowait_time\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_rd_ios\n",
      "Checking for anomalies\n",
      "****************************************\n",
      "Anomaly in  os_022 Disk_rd_ios\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 CPU_idle_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_await\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_avgqu_sz\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Processor_load_5_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Processor_load_1_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Disk_io_util\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Processor_load_15_min\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 CPU_util_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  os_022 Memory_available_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Memory_free os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_022 Sent_packets\n",
      "Sent_packets os_022 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Cache_used os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_022 Sent_errors_packets\n",
      "Sent_errors_packets os_022 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Buffers_used os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_022 Received_packets\n",
      "Received_packets os_022 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Running detection for  os_022 Received_errors_packets\n",
      "Received_errors_packets os_022 not enough data\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Swap_used_pct os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Num_of_processes os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Zombie_Process os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Num_of_running_processes os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "System_wait_queue_length os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "System_block_queue_length os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Sent_queue os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Received_queue os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Shared_memory os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_used_space os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_used_pct os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_total_space os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_max_util os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "FS_max_avail os_022  model does not exist\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Not enough data! Skipping\n",
      "Memory_total os_022  model does not exist\n",
      "Saving os into dfs\n",
      "Saving db into dfs\n",
      "Saving redis into dfs\n",
      "Saving container into dfs\n",
      "Saving docker into dfs\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_mem_used\n",
      "Checking for anomalies\n",
      "****************************************\n",
      "Anomaly in  docker_001 container_mem_used\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_thread_running\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_thread_idle\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_fgct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_thread_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_thread_used_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_session_used\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_fgc\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_001 container_cpu_used\n",
      "Checking for anomalies\n",
      "Saving os into dfs\n",
      "Saving db into dfs\n",
      "Saving redis into dfs\n",
      "Saving container into dfs\n",
      "Saving docker into dfs\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_mem_used\n",
      "Checking for anomalies\n",
      "****************************************\n",
      "Anomaly in  docker_002 container_mem_used\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_thread_used_pct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_thread_running\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_cpu_used\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_fgct\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_thread_total\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_session_used\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_thread_idle\n",
      "Checking for anomalies\n",
      "----------------------------------------\n",
      "Getting KPI x Host data\n",
      "Running detection for  docker_002 container_fgc\n",
      "Checking for anomalies\n"
     ]
    }
   ],
   "source": [
    "for host in ['os_021','os_022','docker_001','docker_002']:\n",
    "    problems = find_anom(host, pp.load_dfs(data_path))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "problems"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('docker_004', 'container_mem_used')]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "problems\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
